#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    printf("main进程(%d)开始执行 \n", getpid());

    pid_t pid = fork();

    if (pid == 0) { // 子进程
        printf("子进程(%d)执行 \n", getpid());

        // ping www.baidu.com -c 5
        // 通过execve执行命令程序
        char *path = "/bin/ping";
        char *argv[] = {path, "www.baidu.com", "-c", "5", NULL};
        char *envp[] = {NULL};
        execve(path, argv, envp);
        printf("execve找不到可执行的程序失败了 \n");


    } else if (pid > 0) { // 父进程

        printf("父进程(%d)执行 \n", getpid());
        // 等待子进程结束
        int status;
        waitpid(pid, &status, 0); // 0表示真正等待子进程结束才返回
        printf("子进程结束（%d），回到父进程继续执行， \n", status);
    }
    
    
    printf("进程(%d)执行结束 \n", getpid());

    // return 0;
    exit(EXIT_SUCCESS);
    // exit(EXIT_FAILURE);
}
